#lang racket
;==============================================================================;
;=================================== MAIN.RKT =================================;
;Version : 1.0.0
;Rôle : Créer le contexte de l'animation et la lancer à l'aide d'un bigbang.
;==============================================================================;




;==============================================================================;
;============== PARTIE 1 - Variables globales et autres définitions ===========;
;==============================================================================;

;---------------------------- 1.0 - importations ------------------------------;
(require "monde.rkt" "image.rkt" "note.rkt")
(require rsound rsound/piano-tones)
(require 2htdp/image 2htdp/universe)

;----------------------- 1.1 - Définition des images --------------------------;
(define balle1 (new Balle% (posY 50) (posX 50) (rayon 20) (couleur "blue")))
(define balle2 (new Balle% (posY 50) (posX 150) (rayon 30) (couleur "green")))
(define balle3 (new Balle% (posY 50) (posX 250) (rayon 20) (couleur "yellow")))
(define balle4 (new Balle% (posY 50) (posX 350) (rayon 40) (couleur "grey")))

(define balles (list balle1 balle2 balle3 balle4))


;----------------------- 1.2 - Définition des notes ---------------------------;
(define la-piano-noire (new note%))

;-------------------- 1.3 - Définition des partitions -------------------------;
(define partition1 (list la-piano-noire la-piano-noire la-piano-noire))

;------------- 1.4 - Définition des autres éléments importants ----------------;
(define HEIGHT 400) ;Hauteur de la scene
(define WIDTH 800) ;Largeur de la scene
(define SCENE (rectangle WIDTH HEIGHT 'solid "magenta"))
(define monde (new monde% 
                   (partition partition1)
                   (images balles)))


;==============================================================================;
;========================== PARTIE 2 - L'animation ============================;
;==============================================================================;
(define (animation)
  
  ;------------------------------ SUIVANT -------------------------------------;
  (define (suivant monde)
    (send monde lire-partition)
    monde)
  
  
  ;----------------------------- DESSINER -------------------------------------;
  (define (dessiner monde)
    (define ecran SCENE)
    (for [(img (in-list (send monde get-images)))]
      (set! ecran
            (underlay/xy ecran
                             (send img getPosX) (send img getPosY)
                             (send img getImage))))
    ecran)
  
  
  ;----------------------------- FINISHED? ------------------------------------;
  (define (finished? monde)
    (empty? (send monde get-partition)))
  
  
  ;------------------------------ BIG-BANG ------------------------------------;
  (big-bang monde
            (on-tick suivant 1/48)
            (on-draw dessiner)
            (stop-when finished?)))










;==============================================================================;
;=========================== PARTIE 3 - Les tests =============================;
;==============================================================================;